var dataNode = {
		title : '正则手册',
		data : []
	};

//创建正则表达式
dataNode.data.push({
	title : '创建正则',
	cate : 'init',
	type : '初识化,创建,正则,new',
	info : [
		'<h1>一、创建正则表达式</h1>',
		'<div class="node-item">',
			'<h2>1.字面量</h2>',
			'<div class="node-des">',
				'<p class="des-p">语法：Reg = /pattern/modifiers;</p>',
				'<p class="jump-p">',
					'字面量的正则由两个正斜杆组成<span class="strong">//</span><br />',
					'第一个正斜杆后面写规则：/pattern[规则可以写各式各样的<a href="#/cate-character">元字符</a>|<a href="#/cate-classifier">量词</a>|<a href="#/cate-grouping">字集</a>|<a href="#/cate-assertion">断言</a>...]<br />',
					'第二个正斜杆后面写标识符/modifiers[g全局匹配 | i忽略大小写 | m换行匹配 | ^起始位置 | $结束位置] <a href="#/cate-identifier">标识符</a>',
				'</p>',
			'</div>',
			'<pre>',
				'var Reg = /box/gi;//返回一个reg对象',
			'</pre>',
		'</div>',
		'<div class="node-item">',
			'<h2>2.构造函数</h2>',
			'<div class="node-des">',
				'<p class="des-p">语法 Reg = new RegExp( pattern , modifiers );</p>',
				'<p>pattern ，modifiers此时是<span class="strong">字符串</span>!!!</p>',
			'</div>',
			'<pre>',
				'var Reg = new RegExp("box","gi");',
			'</pre>',
			'<pre class="error-code">',
				'/*\n',
					'错误示范,不报错,但是不建议\n',
					'这里实际上是两个reg对象\n',
				'*/\n',
				'var Reg = new RegExp(/box/,"gi");',
			'</pre>',
		'</div>',
		'<div class="node-item">',
			'<h2>3.在规则中使用变量</h2>',
			'<pre>',
				'var queryVar = "box";\n',
				'var Reg = new RegExp(queryVar,"gi");',
			'</pre>',
		'</div>'
	]
});

//正则的使用方法
dataNode.data.push({
	title : '用法及区别',
	cate : 'use',
	type : '使用,调用,方法,RegExp,String,match,search,replace,split,exec,search',
	info : [
		'<h1>二、正则表达式用法及区别</h1>',
		'<div class="node-item">',
			'<h2>1. String中正则表达式方法</h2>',
			'<div class="node-des">',
				'<div class="node-subitem">',
					'<h3>-1、match方法</h3>',
					'<p>返回RegExp匹配的包含全部字符串的<span class="strong">数组</span>或<span class="strong">null</span></p>',
					'<p class="des-p">',
						'String.match(<span class="strong">Reg</span>)',
					'</p>',
				'</div>',
				'<div class="node-subitem">',
					'<h3>-2、search方法</h3>',
					'<p>返回RegExp匹配字符串<span class="strong">首次</span>出现的<span class="strong">下标</span></p>',
					'<p class="des-p">',
						'String.search(<span class="strong">Reg</span>)',
					'</p>',
				'</div>',
				'<div class="node-subitem">',
					'<h3>-3、replace方法</h3>',
					'<p>用<span class="strong">newStr</span>（新字符串）替换RegExp匹配结果，并返回新字符串</p>',
					'<p class="des-p">',
						'String.replace(<span class="strong">Reg</span>,<span class="strong">newStr</span>)',
					'</p>',
				'</div>',
				'<div class="node-subitem">',
					'<h3>-4、split方法</h3>',
					'<p>返回字符串按指定RegExp<span class="strong">拆分</span>的<span class="strong">数组</span></p>',
					'<p class="des-p">',
						'String.split(<span class="strong">Reg</span>)',
					'</p>',
				'</div>',
		'</div>',
		'<div class="node-item">',
			'<h2>2. RegExp对象的方法</h2>',
			'<div class="node-des">',
				'<div class="node-subitem">',
					'<h3>-1、exec方法</h3>',
					'<p>在字符串中执行匹配搜索，返回首次匹配结果<span class="strong">数组</span></p>',
					'<p class="des-p">',
						'RegExp.exec(<span class="strong">String</span>)',
					'</p>',
				'</div>',
				'<div class="node-subitem">',
					'<h3>-2、test方法</h3>',
					'<p>在字符串中测试模式匹配，返回<span class="strong">true</span>或<span class="strong">false</span></p>',
					'<p class="des-p">',
						'RegExp.test(<span class="strong">String</span>)',
					'</p>',
				'</div>',
			'</div>',
		'</div>'
	]
});


//元字符
dataNode.data.push({
	title : '元字符',
	cate : 'character',
	type : '特殊字符,转义字符,\\',
	info : [
		'<h1>三、元字符</h1>',
		'<div class="node-item">',
			'<p>在正则表达式中具有特殊意义的专用字符</p>',
			'<pre>',
				'<span class="strong">.</span> 任意字符，除了换行符\\n与制表符\\r \n',
				'<span class="strong">\\</span> 转义字符，将具有特殊意义的符号转义成普通符号: \\.\n',
				'<span class="strong">\\d</span> 数字[0~9]\n',
				'<span class="strong">\\D</span> 非数字\n',
				'<span class="strong">\\s</span> 空格\n',
				'<span class="strong">\\S</span> 非空格\n',
				'<span class="strong">\\w</span> 字符[字母|数字|下划线]\n',
				'<span class="strong">\\W</span> 非字符\n',
				'<span class="strong">\\b</span> 单词边界\n',
				'<span class="strong">\\B</span> 非单词边界\n',
			'</pre>',
		'</div>'
	]
});

//量词
dataNode.data.push({
	title : '量词/特殊符号',
	cate : 'classifier',
	type : '范围,贪婪,懒惰,中文,特殊符号',
	info : [
		'<h1>四、量词/特殊符号</h1>',
		'<div class="node-item">',
			'<h2>1. 量词</h2>',
				'<div class="node-subitem">',
				'<p class="des-p">匹配字符的出现次数，匹配模式中有贪婪模式与懒惰模式</p>',
				'<pre>',
					'<span class="strong">n?</span> 可有可无，匹配<span class="strong">0</span>个或<span class="strong">1</span>个n的字符串  \n',
					'<span class="strong">n*</span> 匹配<span class="strong">0</span>个或多个字符串(任意个) \n',
					'<span class="strong">n+</span> 匹配<span class="strong">至少1个</span>n字符串 \n',
					'<span class="strong">n{num}</span> 匹配包含<span class="strong">num</span>个n的序列的字符串\n',
					'<span class="strong">n{min,max}</span> 匹配包含至少<span class="strong">min</span>或至多<span class="strong">max</span>个n的序列的字符串\n',
					'<span class="strong">n{num,}</span> 匹配至少<span class="strong">num</span>个n的序列字符串\n',
				'</pre>',
			'</div>',
		'</div>',
		'<div class="node-item">',
			'<h2>2. 特殊符号</h2>',
				'<div class="node-subitem">',
				'<p class="des-p">具有特殊意义的符号</p>',
				'<pre>',
					'<span class="strong">^n</span> 匹配以n<span class="strong">开头</span>的字符串 \n',
					'<span class="strong">n$</span> 匹配以n<span class="strong">结尾</span>的字符串\n',
					'<span class="strong">[^n]</span> ^出现中在[]中括号里表示取<span class="strong">不包含</span>n字符的字符串 \n',
					'<span class="strong">n|m</span> 匹配n<span class="strong">或者</span>m.两个<span class="strong">只取一个</span>\n',
				'</pre>',
			'</div>',
		'</div>',
		'<div class="node-item">',
			'<h2>3. 贪婪/懒惰</h2>',
				'<div class="node-subitem">',
				'<p class="des-p">贪婪: 尽可能多的匹配 / 惰性: 尽可能少的匹配 </p>',
				'<pre>',
					'<span class="strong">n+</span> 贪婪模式为<span class="strong">默认</span> \n',
					'<span class="strong">n+?</span> 量词后面带<span class="strong">?</span>问号就是懒惰模式，以次类推\n',
					'<span class="strong">{n,m}</span> 贪婪模式 \n',
					'<span class="strong">{n,m}?</span> 懒惰模式\n',
				'</pre>',
			'</div>',
		'</div>'
	]
});

//标识符
dataNode.data.push({
	title : '标识符',
	cate : 'identifier',
	type : 'modifiers,|,全局,换行匹配,忽略大小写,修饰符',
	info : [
		'<h1>五、标识符</h1>',
		'<div class="node-item">',
			'<p class="des-p">标识符也称作修饰符，可指定匹配的模式 </p>',
			'<pre>',
				'<span class="strong">g</span> <span class="strong">全局</span>匹配 \n',
				'<span class="strong">i</span> <span class="strong">忽略</span>大小写 \n',
				'<span class="strong">m</span> <span class="strong">多行</span>匹配，需要匹配^开头字符串时,配合使用 \n',
			'</pre>',
		'</div>'
	]
});

//字集与分组
dataNode.data.push({
	title : '字集/分组',
	cate : 'grouping',
	type : '[],()',
	info : [
		'<h1>六、字集[]/分组()</h1>',
		'<div class="node-item">',
			'<div class="node-subitem">',
				'<h2>字集[]</h2>',
				'<p>[]代表一个集合</p>',
				'<pre>',
					'<span class="strong">[1-9]</span> 匹配<span class="strong">0~9</span>之间的字符  \n',
					'<span class="strong">[^1-9]</span> 匹配<span class="strong">非0~9</span>之间的字符 \n',
					'<span class="strong">[a-z]</span> 匹配<span class="strong">小写a至小写z</span>的字符 \n',
					'<span class="strong">[A-Z]</span> 匹配<span class="strong">大写A至大写Z</span>的字符 \n',
					'<span class="strong">[\\u4e00-\\u9fa5]</span> 匹配<span class="strong">所有中文</span> \n',
					'<span class="strong">[1-9a-zA-Z]</span> 可配合使用 \n',
				'</pre>',
			'</div>',
		'</div>',
		'<div class="node-item">',
			'<div class="node-subitem">',
				'<h2>分组()</h2>',
				'<p>()代表一个分组</p>',
				'<pre>',
					'<span class="strong">(abc)b</span> 匹配到abcd字符串<span class="strong">abc</span>是一个不可划分的整体\n',
					'<span class="strong">(\\d{*4})b</span> 匹配<span class="strong">任意4个数字</span>加上b的字符 \n',
				'</pre>',
				'<pre>',
					'//分组使用范例\n',
					'匹配到的分组可以依次使用 $1 $2 $3取到\n',
					'var y = "2018-06-29";\n',
					'y.replace(/(\d+)-(\d+)-(\d+)/,"$2/$3/$1");//"06/29/2018"\n',
				'</pre>',
			'</div>',
		'</div>'
	]
});


//断言
dataNode.data.push({
	title : '断言',
	cate : 'assertion',
	type : '断言,前瞻,预言,零宽度',//前瞻,后顾,负前瞻,负后顾
	info : [
		'<h1>七、断言/前瞻 </h1>',
		'<div class="node-item">',
			'<p class="des-p">正则表达式中,用于查找某些内容之前(前瞻)或者之后(后顾)的东西,叫做断言。JavaScript只有前瞻负前前瞻，<span class="strong">并没有后顾负后顾</span></p>',
			'<pre>',
				'//零宽度，说明它是不占字符宽度的，只是一个位置，它不匹配任何东西\n',
				'(?=pattern) 零宽正向断言 \n',
				'(?!pattern) 零宽负向断言 \n',
			'</pre>',
			'<pre>',
				'var str = "window 2018"; \n',
				'//正向断言window\\s后面是否<span class="strong">为</span>2018',
				'/window\\s(?=2018)/.test(str)//true \n',
				'//负向断言window\\s后面是否<span class="strong">不为</span>2018',
				'/window\\s(?!2018)/.test(str)//false \n',
			'</pre>',
		'</div>'
	]
});